#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int N = 100000000; //numero de vezes que vai rodar o loop
int n = 0,i;  //contador inicializa em 0.
float x, y; //x e  y que vão ser usados para incrementar o contador.
float randomico, raiz; //numero randomico
double resultado; //variável do resultado
int NUM_THREADS = 100;  //número de threads que irão executar o tanto de loops.

//função que cada thread vai rodar
void *calcula_n(void *threadid) //parâmetro nem é usado.
{
    srand(time(NULL));
            for(i = 0; i < (N/NUM_THREADS); i++) //em cada thread, i vai até N/Nro de threads
                {
                                randomico = (float) rand();
                                x = (randomico/RAND_MAX);  //gera x
                                randomico = (float) rand();
                                y = (randomico/RAND_MAX);  //gera y

                               raiz = sqrt((x*x)+(y*y));  //calcula a raiz
                               if(raiz <= 1)  //compara a raiz e incrementa o contador
                               {
                                               n++;
                               }
                }
   pthread_exit(NULL);
}

int main(int argc, char *argv[])
{
   pthread_t threads[NUM_THREADS];
   int rc;
   long t;
   for(t=0;t<NUM_THREADS;t++){
     pthread_create(&threads[t], NULL, calcula_n, NULL); //cria a thread
     pthread_join( threads[t], NULL);
     }

     resultado = (4 * (float)n)/(float)N;   //calcula o resultado final
     printf("PI e igual a: %g\n", resultado);

   pthread_exit(NULL);
}
